package com.zhangye.test.util;

import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import okhttp3.Call;
import okhttp3.OkHttpClient;

import org.asynchttpclient.AsyncCompletionHandler;
import org.asynchttpclient.AsyncHttpClient;
import org.asynchttpclient.DefaultAsyncHttpClient;
import org.asynchttpclient.Param;
import org.asynchttpclient.Response;
import org.json.JSONObject;

import com.google.gson.Gson;
import com.zhangye.test.cloud.Auth;
import com.zhangye.test.easy.Common;
import com.zhangye.test.entity.EasyAddError;
import com.zhangye.test.entity.EasyArResult;
import com.zhangye.test.entity.SimilarResult;

public class cloudUtils {
	
	private static final String HOST       = "http://6296c09052012b394de6c002d7b81508.cn1.crs.easyar.com:8888";
    private static final String APP_KEY    = "a1d3c25006629cf8e3bbabd0c64003dd";
    private static final String APP_SECRET = "kYSRElAeH4ceubOnGnBiMqyrHYUgspVHZqBcibifXD10ldVjwhU1RGRwebMjGsry7ItPyreLGBQfG5ZB6IzSKspVmhOeLGQ3ZkB08G7BPE9gSnZyLQiscnHiEOiBS5I8";


    
    /**
     * 修改视频
     * 作者： 张叶
     * 创建时间：2018年8月28日  上午11:56:28
     */
    public static EasyArResult updateVideoUrl(String targetId,String videoUrl) throws Exception{
        JSONObject params = new JSONObject();
        params.put("meta", videoUrl);
		Auth.signParam(params, APP_KEY, APP_SECRET);
        String result = HttpUtil.requestPut(HOST + "/target/" + targetId, params.toString());
		Gson gson = new Gson();
		EasyArResult ear = gson.fromJson(result,EasyArResult.class);
        return ear;
    }
    
    /**
     * 修改图片
     * 作者： 张叶
     * 创建时间：2018年8月28日  上午11:56:28
     */
    public static EasyArResult updateImageUrl(String targetId,String imageUrl) throws Exception{
        JSONObject params = new JSONObject();
        params.put("image", imageUrl);
		Auth.signParam(params, APP_KEY, APP_SECRET);
        String result = HttpUtil.requestPut(HOST + "/target/" + targetId, params.toString());
		Gson gson = new Gson();
		EasyArResult ear = gson.fromJson(result,EasyArResult.class);
        return ear;
    }
    

    /**
     * 检测相似度
     * 作者： 张叶
     * 创建时间：2018年8月7日  下午4:58:42
     */
	public static SimilarResult similarCloud(String file) throws Exception {
		JSONObject params = new JSONObject();
        params.put("image", file);
		Auth.signParam(params, APP_KEY, APP_SECRET);
		String result = HttpUtil.requestPost(HOST + "/similar/", params.toString());
		Gson gson = new Gson();
		SimilarResult sr1 = gson.fromJson(result,SimilarResult.class);
        return sr1;
	}
    
    
    /**
     * 添加
     * 作者： 张叶
     * 创建时间：2018年5月22日  下午3:44:43
     */
    public static EasyArResult addClouds(String file,String name,Integer size,String meta) throws Exception{
        JSONObject params = new JSONObject();
        params.put("image", file);
        params.put("active", "0");//0：停用，1：启用
        params.put("name", name);
        params.put("size", "20");
        params.put("meta", meta); 
        params.put("type","ImageTarget");
        Auth.signParam(params, APP_KEY, APP_SECRET);
        String result = HttpUtil.requestPost(HOST + "/targets/", params.toString());
		Gson gson = new Gson();
		EasyArResult ear = new EasyArResult();
		try{
			ear = gson.fromJson(result,EasyArResult.class);
		}catch(Exception e){
			EasyAddError eae = gson.fromJson(result,EasyAddError.class);
			ear.setStatusCode(eae.getStatusCode());
			
		}
        return ear;
    }
    
    
    /**
     * 修改
     * 作者： 张叶
     * 创建时间：2018年5月18日  上午9:16:13
     */
    public static EasyArResult updateCloud(String targetId,String active,String name){
        JSONObject params = new JSONObject();
        params.put("active", active);
        params.put("name", name);
        params.put("size", "20");
        Auth.signParam(params, APP_KEY, APP_SECRET);
        String result = HttpUtil.requestPut(HOST + "/target/" + targetId, params.toString());
		Gson gson = new Gson();
		EasyArResult ear = gson.fromJson(result,EasyArResult.class);
        return ear;
    }

    
    /**
     * 修改
     * 作者： 张叶
     * 创建时间：2018年5月18日  上午9:16:13
     */
    public static EasyArResult updateCloud(String targetId,String meta) throws Exception{
        JSONObject params = new JSONObject();
        params.put("meta", meta); 
		Auth.signParam(params, APP_KEY, APP_SECRET);
        String result = HttpUtil.requestPut(HOST + "/target/" + targetId, params.toString());
		Gson gson = new Gson();
		EasyArResult ear = gson.fromJson(result,EasyArResult.class);
        return ear;
    }
    
    
    
    /**
     * 根本targetId得到信息
     * 作者： 张叶
     * 创建时间：2018年5月10日  下午3:33:13
     */
	public static void getCloud(String targetId) {
		AsyncHttpClient client = new DefaultAsyncHttpClient();
		JSONObject params = new JSONObject();
		Auth.signParam(params, APP_KEY, APP_SECRET);

		client.prepareGet(HOST + "/target/" + targetId)
		.setQueryParams(toParams(params))
		.execute(new AsyncCompletionHandler<Void>() {
			@Override
			public Void onCompleted(Response response) throws Exception {
				System.out.println(response.getResponseBody());
				client.close();
				return null;
			}
		});
	}
	
	
	/**
	 * 删除
	 * 作者： 张叶
	 * 创建时间：2018年8月27日  上午10:19:13
	 */
	public static void removeClouds(String targetId) throws Exception {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(30, TimeUnit.SECONDS);
        builder.readTimeout(120,TimeUnit.SECONDS);
        OkHttpClient client = builder.build();
        JSONObject params = new JSONObject();
        Auth.signParam(params, APP_KEY, APP_SECRET);

        okhttp3.Request request = new okhttp3.Request.Builder()
                .url(HOST+"/target/"+targetId+"?"+ Common.toParam(params))
                .delete()
                .build();
        Call call = client.newCall(request);
    	okhttp3.Response response = call.execute();
        System.out.println(response.body().string());
	}
	
	
	
	
	
	/**
	 * 根据targetId删除
	 * 作者： 张叶
	 * 创建时间：2018年5月10日  下午3:33:48
	 */
//	static RemoveResult rr = new RemoveResult();
//	public static RemoveResult removeCloud(String targetId) throws Exception {
//		AsyncHttpClient client = new DefaultAsyncHttpClient();
//		JSONObject params = new JSONObject();
//		Auth.signParam(params, APP_KEY, APP_SECRET);
//        client.prepareDelete(HOST + "/target/" + targetId)
//                .setQueryParams(toParams(params))
//                .execute(new AsyncCompletionHandler<Void>() {
//                    @Override
//                    public Void onCompleted(Response response) throws Exception {
//                        System.out.println(response.getResponseBody());
//                        client.close();
//                        return null;
//                    }
//                });
//		Thread.sleep(5000);
//        return rr;
//	}

    private static List<Param> toParams(JSONObject jso) {
        return jso.keySet().stream()
                .map(key -> new Param(key, jso.getString(key)))
                .collect(Collectors.toList());
    }
}
